//
//  IMSDKStartupConfigManager.h
//  DualMediationSDK
//
//  SDK启动配置管理器
//  Created by YeJary on 2025/7/15.
//

#import <Foundation/Foundation.h>
#import "IMAdStrategyModels.h"

NS_ASSUME_NONNULL_BEGIN

/**
 * SDK启动配置管理器
 * 负责应用从广告策略下发的SDK启动配置参数
 */
@interface IMSDKStartupConfigManager : NSObject

#pragma mark - 单例模式

/**
 * 获取单例实例
 * @return 配置管理器实例
 */
+ (instancetype)sharedManager;

#pragma mark - 配置应用

/**
 * 应用SDK启动配置
 * @param config SDK启动配置实例
 */
- (void)applySDKStartupConfig:(IMSDKStartupConfig *)config;

/**
 * 应用默认SDK启动配置
 */
- (void)applyDefaultSDKStartupConfig;

#pragma mark - 独立配置应用方法

/**
 * 应用日志配置
 * @param logEnabled 日志开关，YES表示开启日志，NO表示关闭
 */
- (void)applyLogConfiguration:(nullable NSNumber *)logEnabled;

/**
 * 应用新用户天数配置
 * @param newUserDay 新用户天数阈值，用于划分高低价值用户
 */
- (void)applyNewUserDayConfiguration:(nullable NSNumber *)newUserDay;

/**
 * 应用用户分层开关配置
 * @param userSwitchEnabled 用户分层开关，YES表示开启用户分层，NO表示关闭
 */
- (void)applyUserSwitchConfiguration:(nullable NSNumber *)userSwitchEnabled;

/**
 * 应用美国隐私配置
 * @param usPrivacyEnabled 美国隐私弹窗开关，YES表示开启隐私弹窗，NO表示关闭
 */
- (void)applyUSPrivacyConfiguration:(nullable NSNumber *)usPrivacyEnabled;

/**
 * 应用Adjust事件配置
 * @param adjustEvent Adjust事件名称，格式："事件名称1:识别码;事件名称2:识别码"
 */
- (void)applyAdjustEventConfiguration:(nullable NSString *)adjustEvent;

/**
 * 应用SDK类型配置
 * @param sdkType SDK聚合类型，支持"IS&MAX"、"IS"、"MAX"
 */
- (void)applySDKTypeConfiguration:(nullable NSString *)sdkType;

/**
 * 应用广告行为上报配置
 * @param adTrackEnabled 广告行为上报开关，YES表示开启上报，NO表示关闭
 */
- (void)applyAdTrackConfiguration:(nullable NSNumber *)adTrackEnabled;

/**
 * 应用广告加载上报配置
 * @param adLoadTrackEnabled 广告加载上报开关，YES表示开启上报，NO表示关闭
 */
- (void)applyAdLoadTrackConfiguration:(nullable NSNumber *)adLoadTrackEnabled;

/**
 * 应用Facebook控制配置
 * @param fbControl Facebook控制参数，格式："参数1;参数2;参数3"
 */
- (void)applyFacebookControlConfiguration:(nullable NSString *)fbControl;

/**
 * 应用Facebook关卡事件配置
 * @param fbLevelEvent Facebook关卡事件，格式："fb_level_win_关卡:价值;fb_level_win_关卡:价值"
 */
- (void)applyFacebookLevelEventConfiguration:(nullable NSString *)fbLevelEvent;

#pragma mark - 配置获取方法

/**
 * 获取当前日志开关状态
 * @return 日志开关状态
 */
- (BOOL)isLogEnabled;

/**
 * 获取当前新用户天数配置
 * @return 新用户天数
 */
- (NSInteger)getNewUserDay;

/**
 * 获取当前用户分层开关状态
 * @return 用户分层开关状态
 */
- (BOOL)isUserSwitchEnabled;

/**
 * 获取当前美国隐私配置状态
 * @return 美国隐私弹窗开关状态
 */
- (BOOL)isUSPrivacyEnabled;

/**
 * 获取当前Adjust事件配置
 * @return Adjust事件配置字符串
 */
- (nullable NSString *)getAdjustEventConfiguration;

/**
 * 获取当前SDK类型配置
 * @return SDK聚合类型
 */
- (nullable NSString *)getSDKTypeConfiguration;

/**
 * 获取当前广告行为上报配置状态
 * @return 广告行为上报开关状态
 */
- (BOOL)isAdTrackEnabled;

/**
 * 获取当前广告加载上报配置状态
 * @return 广告加载上报开关状态
 */
- (BOOL)isAdLoadTrackEnabled;

/**
 * 获取当前Facebook控制配置
 * @return Facebook控制参数字符串
 */
- (nullable NSString *)getFacebookControlConfiguration;

/**
 * 获取当前Facebook关卡事件配置
 * @return Facebook关卡事件配置字符串
 */
- (nullable NSString *)getFacebookLevelEventConfiguration;

#pragma mark - 配置重置

/**
 * 重置所有配置为默认值
 */
- (void)resetToDefaultConfiguration;

/**
 * 清除所有配置缓存
 */
- (void)clearConfigurationCache;

@end

NS_ASSUME_NONNULL_END